/**
 @description: 用户相关store
 @author: macro
 @time: 2024/6/6 12:18
 */
// 引入defineStore用于创建store
// import {defineStore} from "pinia";
// import {constantRoute} from "@/router/routes.ts";
// import {loginFormData} from "@/api/user/type.ts";
// import {reqLogin} from "@/api/user";
// import {UserState} from "@/store/modules/types/type.ts";
// import {SET_TOKEN} from "@/utils/token.ts";

/**
 * @description: 创建store
 * @param: id:store 的唯一标识符。它用于在 Pinia 应用中注册和查找特定的 store
 * @author: macro
 * @date: 2024/6/6 12:23
 */
//创建用户相关的小仓库
import { defineStore } from 'pinia';
//引入接口
import { reqLogin } from '@/api/user';
import type { loginFormData } from "@/api/user/type";
import type { UserState } from './types/type';
//引入操作本地存储的工具方法
import { SET_TOKEN, GET_TOKEN } from '@/utils/token';
//引入路由(常量路由)
import { constantRoute } from '@/router/routes';


//创建用户小仓库
let useUserStore = defineStore('User', {
    //小仓库存储数据地方
    state: (): UserState => {
        return {
            token: GET_TOKEN(),//用户唯一标识token
            // 把配置的常量路由存放在用户的仓库中，供其他地方方便使用
            menuRoutes: constantRoute,
            username: '',
            avatar: '',
            //存储当前用户是否包含某一个按钮
            buttons:[],
        }
    },
    //异步|逻辑的地方
    actions: {
        //用户登录的方法
        async userLogin(data: loginFormData) {
            //登录请求
            let result: any = await reqLogin(data);
            //登录请求:成功200->token
            //登录请求:失败201->登录失败错误的信息
            if (result.code == 200) {
                //pinia仓库存储一下token
                //由于pinia|vuex存储数据其实利用js对象
                this.token = (result.data as string);
                //本地存储持久化存储一份
                SET_TOKEN((result.data as string));
                //能保证当前async函数返回一个成功的promise
                return 'ok';
            } else {
                return Promise.reject(new Error(result.data));
            }
        },


    },
    getters: {

    }
})
//对外暴露获取小仓库方法
export default useUserStore;
